﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Model.Auxiliar;
using Model;
using BLL;

namespace HRP.Private.Funcionarios.Controlos
{
    public partial class Editar_Dados : System.Web.UI.UserControl
    {
        public Funcionario FuncionarioActual { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack && Session["EmpresaActual"] != null && FuncionarioActual != null)
            {
                Session["VistaEmpresaId"] = ((hrp_empresas)Session["EmpresaActual"]).id;
                CarregarFuncionario();
                CarregarDepartamentos();
                CarregarCargos();
                CarregarPaises();
            }

            Page.PreRender += Page_PreRender;
            departamentosList.SelectedIndexChanged += new EventHandler(departamentosList_SelectedIndexChanged);
        }

        void departamentosList_SelectedIndexChanged(object sender, EventArgs e)
        {
            CarregarCargos();
        }

        void Page_PreRender(object sender, EventArgs e)
        {
            if (FuncionarioActual == null)
                LimparDadosFuncionario();
        }

        void CarregarPaises()
        {
            paisDDL.DataSource = Utilidade_BLL.Instance.ObterListaPaises();
            paisDDL.DataBind();
            paisDDL.Items.FindByText(FuncionarioActual.Dados.pais).Selected = true;
        }

        void CarregarDepartamentos()
        {
            List<hrp_departamentos> listaDep = new List<hrp_departamentos>();
            if (Session["EmpresaActual"] != null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                listaDep.AddRange(Departamento_BLL.Instance.obterDepartamentosEmpresa((int)Session["idclient"], empresa.id, false, false).AsEnumerable());
            }
            departamentosList.DataSource = listaDep;
            departamentosList.DataBind();
            hrp_departamentos cargo = listaDep.FirstOrDefault(d => d.id == FuncionarioActual.Departamento.id);
            if (cargo != null)
            {
                cargoList.SelectedIndex = cargoList.Items.IndexOf(cargoList.Items.FindByValue(cargo.id.ToString()));
            }
        }

        void CarregarCargos()
        {
            hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
            int departamentoActual = 0;
            Int32.TryParse(departamentosList.SelectedItem.Value, out departamentoActual);

            List<Cargo> listaCargos = new List<Cargo>();
            listaCargos.AddRange(Cargo_BLL.Instance.obterCargosDepartamento(empresa.id, departamentoActual,true).AsEnumerable());
            cargoList.DataSource = listaCargos;
            cargoList.DataBind();
            if (FuncionarioActual != null)
            {
                Cargo cargo = listaCargos.FirstOrDefault(c => c.Id == FuncionarioActual.Cargo.id);
                if (cargo != null)
                {
                    cargoList.SelectedIndex = cargoList.Items.IndexOf(cargoList.Items.FindByValue(cargo.Id.ToString()));
                }
            }

        }




        private void LimparDadosFuncionario()
        {
            foreach (Control ctrl in this.Controls)
            {
                if (ctrl.GetType() == typeof(Label))
                {
                    Label lb = (Label)ctrl;
                    lb.Text = string.Empty;
                }
            }
        }

        public bool GravarAlterações(string finalPath)
        {
            if (Session["EmpresaActual"] != null && Session["idclient"] != null && Session["userid"] != null && Session["FuncionarioId"]!=null)
            {
                hrp_empresas empresa = (hrp_empresas)Session["EmpresaActual"];
                int clientID = (int)Session["idclient"];
                string userID = Session["userid"].ToString();
                string nome = nomeTb.Text.Trim();
                string morada = moradaTb.Text.Trim();
                string codigopostal = codigoPostalTb.Text.Trim();
                int pais = Convert.ToInt32(paisDDL.SelectedValue);
                string nomepais = paisDDL.SelectedItem.Text.Trim();
                string mail = emailTb.Text.Trim();
                int empresa_id = empresa.id;
                string tlf = telefoneTb.Text.Trim();
                string tlm = telemovelTb.Text.Trim();
                string nib = nibTb.Text.Trim();
                string iban = ibanTb.Text.Trim();
                int numFuncionario = Convert.ToInt32(numFuncionarioTb.Text.Trim());
                double nif = Convert.ToDouble(nifTb.Text.Trim());
                double ss = Convert.ToDouble(ssTb.Text.Trim());
                int cargo = Convert.ToInt32(cargoList.SelectedValue);
                string obs = funcionarioObsTextBox.Text.Trim();

                int funcionarioId = (int)Session["FuncionarioId"];
                Funcionario_BLL.Instance.ActualizarFuncionario(funcionarioId, clientID, userID, Request.UserHostAddress, nome, morada, codigopostal, nomepais, pais, tlf, tlm,
                    mail, nib, iban, cargo, numFuncionario, obs, finalPath, empresa_id, nif, ss);

                return true;
            }
            return false;

        }

        void CarregarFuncionario()
        {
            nomeTb.Text = FuncionarioActual.Dados.nome;
            moradaTb.Text = FuncionarioActual.Dados.morada;
            codigoPostalTb.Text = FuncionarioActual.Dados.codigo_postal;
            telefoneTb.Text = FuncionarioActual.Dados.telefone;
            telemovelTb.Text = FuncionarioActual.Dados.telemovel;
            emailTb.Text = FuncionarioActual.Dados.email;
            nibTb.Text = FuncionarioActual.Dados.nib;
            ibanTb.Text = FuncionarioActual.Dados.iban;
            numFuncionarioTb.Text = FuncionarioActual.Dados.numero_funcionario.Value.ToString();
            funcionarioObsTextBox.Text = FuncionarioActual.Dados.obs;
            nifTb.Text = FuncionarioActual.Dados.nif.ToString();
            ssTb.Text = FuncionarioActual.Dados.ss.ToString();
        }
    }
}